#ifndef __THREADPOOL_H__
#define __THREADPOOL_H__

#include<iostream>
#include<pthread.h>
struct Task_t
{
    //回调函数
    void *(*function)(void *arg);
    // 回调函数的参数
    void *arg;
};
class ThreadPool
{
public:
    //构造函数
    ThreadPool(int minThreads,int maxThreads,int maxQueueCapacity);
    //析构函数
    ~ThreadPool();

public:
    //添加任务
    void addTask(void *(*funcion)(void*arg),void *arg);

public:
    //队列的容量
    int m_queueCapacity;
    //队列任务的个数
    int m_queueSize;
    //队列
    Task_t *m_queue;
    //队列头
    int m_queueFront;
    //队列尾
    int m_queueTail;
    // 线程池里的线程
    pthread_t *m_threads;

    //管理者线程
    pthread_t manageThread;
    // 忙碌的线程数
    int m_busyThreadNums;
    //最大线程数
    int m_maxThreadNums;
    // 最小的线程数
    int m_minThreadNums;
    // 存活的线程数
    int m_aliveThreadNums;
public:
    //锁
    pthread_mutex_t m_mutex;
    //锁2--提升效率--减少竞争
    pthread_mutex_t m_busyMutex;
    // 条件变量
    pthread_cond_t m_queueNotEmpty;
    //条件变量2
    pthread_cond_t m_queueNotFull;
    //要减少的线程数
    int m_exitNum;

};

#endif